class Solution {
public:
    int GetNumberOfK(vector<int> data ,int k) {
        /*
        因为有序，所有如果目标值有多个，肯定是连在一起；
        用两个指针分别指向上界和下界，
        上界定义：如果存在目标，则指向第一个目标值，如果不存在指向大于目标值的第一个值
        下界定义：不管目标存在与否，都指向大于目标的第一个值
         下界-上界即为所求
        */
        //left指向上界 right指向下界
        int left=0,right=0;
        int low=0,high=data.size();
        while(low<high)
        {
            int mid=low+(high-low)/2;
            if(data[mid]<k)
                low=mid+1;
            else
                high=mid;
        }
        left=low;
        low=0;high=data.size();
        while(low<high)
        {
            int mid=low+(high-low)/2;
            if(data[mid]<=k)
                low=mid+1;
            else
                high=mid;
        }
        right=low;
        return right-left;
    }
};